//package com.ruoyi.weixin.shop.exception.handler;
//
//import com.ruoyi.weixin.shop.common.util.ThrowableUtil;
//import com.ruoyi.weixin.shop.exception.BadRequestException;
//import com.ruoyi.weixin.shop.exception.EntityExistException;
//import com.ruoyi.weixin.shop.exception.EntityNotFoundException;
//import com.ruoyi.weixin.shop.exception.ErrorRequestException;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.http.HttpStatus;
//import org.springframework.http.ResponseEntity;
//import org.springframework.security.authentication.BadCredentialsException;
//import org.springframework.web.bind.annotation.ExceptionHandler;
//import org.springframework.web.bind.annotation.RestControllerAdvice;
//
//import static org.springframework.http.HttpStatus.NOT_FOUND;
//import static org.springframework.http.HttpStatus.valueOf;
//
///**
// * @author Zheng Jie
// * @date 2018-11-23
// */
//@Slf4j
//@RestControllerAdvice
//@SuppressWarnings("unchecked")
//public class GlobalExceptionHandler {
//
//    /**
//     * 处理所有不可知的异常
//     */
//    @ExceptionHandler(Throwable.class)
//    public ResponseEntity<ApiError> handleException(Throwable e) {
//        // 打印堆栈信息
//        log.error(ThrowableUtil.getStackTrace(e));
//        return buildResponseEntity(ApiError.error(e.getMessage()));
//    }
//
//    /**
//     * BadCredentialsException
//     */
//    @ExceptionHandler(BadCredentialsException.class)
//    public ResponseEntity<ApiError> badCredentialsException(BadCredentialsException e) {
//        // 打印堆栈信息
//        String message = "坏的凭证".equals(e.getMessage()) ? "用户名或密码不正确" : e.getMessage();
//        log.error(message);
//        return buildResponseEntity(ApiError.error(message));
//    }
//
//    /**
//     * 处理自定义异常
//     */
//    @ExceptionHandler(value = BadRequestException.class)
//    public ResponseEntity<ApiError> badRequestException(BadRequestException e) {
//        // 打印堆栈信息
//        log.error(ThrowableUtil.getStackTrace(e));
//        return buildResponseEntity(ApiError.error(e.getStatus(), e.getMessage()));
//    }
//
//    /**
//     * 处理自定义异常
//     * @param e
//     * @return
//     */
//    @ExceptionHandler(value = ErrorRequestException.class)
//    public ResponseEntity<ApiErr> errorRequestException(ErrorRequestException e) {
//        // 打印堆栈信息
//        log.error(ThrowableUtil.getStackTrace(e));
//        ApiErr apiError = new ApiErr(e.getStatus(), e.getMessage());
//        return buildResponseEntity2(apiError);
//    }
//
//    /**
//     * 处理 EntityExist
//     */
//    @ExceptionHandler(value = EntityExistException.class)
//    public ResponseEntity<ApiError> entityExistException(EntityExistException e) {
//        // 打印堆栈信息
//        log.error(ThrowableUtil.getStackTrace(e));
//        return buildResponseEntity(ApiError.error(e.getMessage()));
//    }
//
//    /**
//     * 处理 EntityNotFound
//     */
//    @ExceptionHandler(value = EntityNotFoundException.class)
//    public ResponseEntity<ApiError> entityNotFoundException(EntityNotFoundException e) {
//        // 打印堆栈信息
//        log.error(ThrowableUtil.getStackTrace(e));
//        return buildResponseEntity(ApiError.error(NOT_FOUND.value(), e.getMessage()));
//    }
//
//    /**
//     * 处理所有接口数据验证异常
//     */
////    @ExceptionHandler(MethodArgumentNotValidException.class)
////    public ResponseEntity<ApiError> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
////        // 打印堆栈信息
////        log.error(ThrowableUtil.getStackTrace(e));
////        String[] str = Objects.requireNonNull(e.getBindingResult().getAllErrors().get(0).getCodes())[1].split("\\.");
////        String message = e.getBindingResult().getAllErrors().get(0).getDefaultMessage();
////        String msg = "不能为空";
////        if (msg.equals(message)) {
////            message = str[1] + ":" + message;
////        }
////        return buildResponseEntity(ApiError.error(message));
////    }
//
//    /**
//     * 统一返回
//     */
//    private ResponseEntity<ApiError> buildResponseEntity(ApiError apiError) {
//        return new ResponseEntity<>(apiError, valueOf(apiError.getStatus()));
//    }
//
//    /**
//     * 统一返回
//     * @param apiError
//     * @return
//     */
//    private ResponseEntity<ApiErr> buildResponseEntity2(ApiErr apiError) {
//        return new ResponseEntity(apiError, HttpStatus.valueOf(apiError.getStatus()));
//    }
//}
